aws-sdk-client-mockを使ってAWS SDK for JavaScript v3をモックする
AWS SDK for JavaScript v3を含むコードベースをテストするとき、aws-sdk-client-mockが便利、という話です。
AWS公式ブログでも言及されています。
使い方
clientの応答をモックしたり、client自体がspyになるので、受け取った値をあとで教えてくれたりします。
import { DynamoDBDocumentClient, GetCommand } from '@aws-sdk/lib-dynamodb'; import { mockClient } from 'aws-sdk-client-mock'; const documentMockClient = mockClient(DynamoDBDocumentClient); beforeEach(() => { documentMockClient.reset(); }); test('GetCommandをモックする', async () => { // モックの応答 documentMockClient.on(GetCommand).resolves({ Item: { deviceId: 'test-deviceId', createdAt: 1643679540259, updatedAt: 1643679540259, }, }); // テスト対象の処理を実行する await myHandler(); // 使われたGetCommandインスタンスの配列を取り出す const callsOfGet = documentMockClient.commandCalls(GetCommand); expect(callsOfGet.length).toBe(1); // 1回目の呼び出しの1個目の引数を取り出す expect(callsOfGet[0].args[0].input).toEqual({ TableName: 'TEST_TABLE', Item: { deviceId: 'test-deviceId', updatedAt: expect.any(Number), createdAt: expect.any(Number), }, }); });
AWS SDKのモックがこんなにシュッと書けたら幸せですよね!
ClientとCommandのクラスを差し替えれば他のサービスでも同じように書けます。
詳細な使い方はREADMEを参考にしてみてください。
以上でした!